package algorithm_primary.studyMySelf.zeroToOne;

/**
 * @author 衡孟浩
 * @date 2023/5/20 21:31
 *
 */
public class test1 {

    /**
     *  x 方法会返回 0 或者 1   但是返回0 和 1 的概率都是不一样的
     *  只能通过 y方法 让 这个y方法返回等概率 0和1
     *  思路:   x返回返回的概率是不相同的  那么如果 y方法调用 x两次    那么 有四种情况  0,0     1,1   1,0   0,1  但是1,0   0,1是等概率的  所以计算  1,0   0,1出现的纪律就行了
     * @param args
     */
    public static void main(String[] args) {
//        boolean a = true;
//        double  b;
//        do {
//            b = Math.random();
//            if (b<0.84){
//                a = false;
//                System.out.println(b);
//            }
//        }while (a);

        int count = 10000;
        int zero = 0;
        for (int i = 0; i < count; i++) {
            if (y() == 0){
                zero++;
            }
        }
        System.out.println((double) zero / (double) count);



    }

    /**
     * 出现0 的概率  0.84  出现1的概率是 0.16
     * @return
     */
    private static int x(){
        return Math.random() < 0.84?0:1;
    }

    /**
     * 根据x等概率返回0喝1
     * @return
     */
    private static int y(){
        int temp = 0;
        do {
            temp = x();
        }while (temp == x());
        return temp;
    }
}
